C compilation explained